package com.itheima.api_demo.object_demo;
/*
    Object类 :
        类 Object 是类层次结构的根类。每个类都使用 Object 作为超类。所有对象（包括数组）都实现这个类的方法。
        public String toString()

        结论 :
            1 如果一个类没有重写toString方法 , 那么打印这个类的对象打印的是对象的地址值
            2 如果一个类重写了toString方法 , 那么打印这个类的对象打印的是此对象的属性值(内容)
 */
public class ToStringDemo {
    public static void main(String[] args) {
        Student s = new Student("赵云" , 20);
        // com.itheima.api_demo.object_demo.Student@452b3a41
        // 以后打印一个对象, 其实在底层会自动调用toString方法
        System.out.println(s);// 地址
        System.out.println(s.toString());// 地址
    }
}

/*
    String类的静态方法:
    public static String valueOf(Object obj) {
        return (obj == null) ? "null" : obj.toString();
    }
    此方法obj接收的是学生对象 , 在方法中判断此对象是否为null
    如果为null 则返回 "null" , 否则使用此对象调用一个方法toString方法

    学生类没有toString方法 , 但是学生类继承Object类 , 所以使用的是Object类中的toString方法
    public String toString() {
        // 包名 + 类名 + @ + 十六进制地址
        return this.getClass().getName() + "@" + Integer.toHexString(this.hashCode());
    }

    this.getClass() : 获取一个类的字节码对象
    this.getClass().getName() : 获取的就是全类名(包名+类名)
    this.hashCode() : 拿到一个对象的哈希码值 , 十进制数据
    Integer.toHexString(十进制数据) : 把十进制数据转成十六进制数据
 */
